package mutacion;


import java.util.ArrayList;

import utils.Arbol;
import utils.SRandom;
import cromosoma.CromosomaBloques;

public class MutacionTerminalSimple implements Mutacion {

	public void mutacion(CromosomaBloques c, double probMutacion) {
        
		String[] cjtoTerminales = {"CP", "BS", "SN"};
		double numAle = SRandom.nextDouble();
		
		if (numAle < probMutacion)
		{
			ArrayList<Arbol> preOrden = c.get_gen().preordenTerminalesSR();
			if (preOrden.size()>0) {
				int numAle2 = SRandom.nextInt((preOrden.size()));
				
				Arbol nodo = preOrden.get(numAle2);
				
				int numAle3 = SRandom.nextInt(cjtoTerminales.length);
				nodo.setNombre(cjtoTerminales[numAle3]);
			}
		}
		
	}

	/*
	//TODO Completar
	private Arbol getTerminalAleatorio(CromosomaBloques c) {
		int numAleNodos = SRandom.nextInt(c.get_gen().getNumNodos());
		Arbol a = c.get_gen().GetArbolPosicion(c.get_gen(), numAleNodos);
		//mientras la raiz del nodo sea una funcion seguir buscando.
		while (a==null || esFuncion(a))
		{
			numAleNodos = SRandom.nextInt(c.get_gen().getNumNodos());
			a = c.get_gen().GetArbolPosicion(c.get_gen(), numAleNodos);
		}
		return a;
	}

	private boolean esFuncion(Arbol a) {
		if ((a.getNombre().equals("MP")) 
			|| (a.getNombre().equals("MM")) 
			|| (a.getNombre().equals("DU")) 
			|| (a.getNombre().equals("NOT")) 
			|| (a.getNombre().equals("EQ")))
		return true;
		else
		return false;
	}
	*/

}


